#include <iostream>
using namespace std;

// void func1(int &ra)
// {
//     ra -= 1;
// }
// int main()
// {
//     // int a = 10;
//     // func1(a);
//     // cout << a << endl;

//     // int a = 10;
//     // int &ra = a;
//     // int &rra = ra;
//     // cout << "a:" << a << " "
//     //      << "ra: " << ra << " "
//     //      << "rra:" << rra << endl;

//     // int a = 10;
//     // int &ra = a;
//     // int b = 20;
//     // ra = b; // 这个操作不是取别名了，而是单纯的把b的值赋值给ra
//     // cout << "a:" << a << endl;

//     // int a = 10;
//     // const int &ra = a;
//     // a = 30;
//     // // a被const修饰，表示a不能被改；而ra是a的引用，ra并没有说明自己不能被改，这时ra的权限被放大了，所以编译报错
//     // cout << "ra: " << ra << endl;

//     // const int x = 10;
//     // int &y = x;
//     // float d = 1.234;
//     // const int &rd = d;
//     // //这里涉及到整型提升，将double转换为int时，提升完了的值存放在一个具有常性的临时变量里，临时变量具有常性，所以右边是常数，左边是变量，左边权限过大
//     // // const int &rd = d;
//     // //这样写才是对的
//     // d = 3213.21312;
//     // cout << d << endl;
//     // cout << rd << endl;
//     return 0;
// }

void Swap(int &a, int &b)
{
    int tmp = a;
    a = b;
    b = tmp;
}
// int main()
// {
//     // int a = 20;
//     // int b = 10;
//     // cout << "a: " << a << "  "
//     //      << "b:" << b << endl;

//     // Swap(a, b);
//     // cout << "a: " << a << "  "
//     //      << "b:" << b << endl;
//     // return 0;

// }

int &Add(int a, int b)
{
    int c = a + b;
    return c;
}
int main()
{
    int &ret = Add(1, 1);
    Add(200, 9);
    cout << "Add(1, 1) is :" << ret << endl;
    return 0;
}